/**
 * @author Abdelilah, Souhaila
 * @version 1.0
 * @created 24-abr-2013 13:24:04
 */

package GestorCompeticion;

import ConexionBD.ConexionBD;
import GestorPartido.Partido;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class CompeticionBD {

	private static CompeticionBD Instancia=null;
        
        public CompeticionBD(){}

	public static CompeticionBD getInstancia(){
	    if (Instancia == null) {
                Instancia = new CompeticionBD();
            }
            
            return Instancia;
	}
        
	
	/**
	 * Añadir una competicion a la base de datos
	 * @param Competicion
	 */
	public Competicion addCompeticion(Competicion compt){
            Competicion result;
            String consulta="INSERT INTO Competicion(Nom_compt,Sexo,Categoria) VALUES ('" +
                compt.getNomCompeticion() +
                "','" + compt.getSexo() +
                "','" + compt.getCategoria() +
                "');";

            try {
                ConexionBD.getInstancia().conectar();
                ResultSet salidaBD=ConexionBD.getInstancia().actualizar(consulta);
                salidaBD.first();
                // Establece el valor de IdCompeticion generado por la BD en el objeto compt
                compt.setIdCompeticion(Integer.parseInt(salidaBD.getString(1)));
                ConexionBD.getInstancia().desconectar();          
                result = compt;
            } catch (SQLException ex) {
                result = null;
            }
            return result;
	}

	/**
	 * 
	 * @param Competicion
	 */
	public boolean deleteCompeticion(Competicion compt){
            
            boolean salida=true;
            String consulta = "DELETE FROM Competicion WHERE IdCompeticion=" + compt.getIdCompeticion().toString() + ";";
            
            try {
                ConexionBD.getInstancia().conectar();
                ResultSet salidaBD = ConexionBD.getInstancia().actualizar(consulta);
                ConexionBD.getInstancia().desconectar();
            } catch (SQLException ex) {
                salida = false;             
                System.out.println(ex);
            }
		return salida;
	}

	/**
	 * 
	 * @param Competicion
	 */
	public Competicion[] updateCompeticion(Competicion compt){
            
            ArrayList<Competicion> Acompeticion  = new ArrayList<Competicion>();           
           String consulta = "UPDATE Competicion SET Nom_compt='" + compt.getNomCompeticion() + 
                "', Sexo='" + compt.getSexo() +
                "', Categoria='" + compt.getCategoria();

            consulta += "' WHERE idCompeticion=" + compt.getIdCompeticion() + ";";
        
            try {
                ConexionBD.getInstancia().conectar();
                ConexionBD.getInstancia().actualizar(consulta);
                ConexionBD.getInstancia().desconectar();
                Acompeticion.add(compt);
            } catch (SQLException ex) {
                System.out.println(ex);
            }
            Competicion[] Vcompeticion =Acompeticion.toArray( new Competicion[Acompeticion.size()] );
            return Vcompeticion;
	}


	/**
	 * 
	 * @param ComCompeticion
	 * @param Categoria
	 * @param Sexo
	 */
	public Competicion[] getCompeticion(String nomCompeticion, String categoria, String sexo){    
            
            Competicion compt;
            ArrayList<Competicion> Acompeticion  = new ArrayList<Competicion>();           
            
            String consulta="SELECT * FROM Competicion WHERE Competicion.Nom_compt LIKE '%" + 
                    nomCompeticion + "%'";
            if (!" ".equals(categoria)) {
                consulta +=  " AND Competicion.Categoria = '" + categoria + "'";
            }
            if (sexo!=null){
                consulta += "AND Competicion.Sexo = '" + sexo+"'";
            }
            consulta += ";";
            
            try {
                ConexionBD.getInstancia().conectar();
                ResultSet tabla = ConexionBD.getInstancia().consultar(consulta);

                while (tabla.next()) { // Si devuelve false es que la búsqueda es vacía
                    compt = new Competicion(tabla.getString("Nom_compt"),
                                    tabla.getString("Sexo").charAt(0), tabla.getString("Categoria"));
                    compt.setIdCompeticion(tabla.getInt("IdCompeticion"));
                    Acompeticion.add(compt);
                }

                ConexionBD.getInstancia().desconectar();
            } catch (SQLException ex) {     
                System.out.println(ex);
            }
         Competicion[] Vcompeticion =Acompeticion.toArray( new Competicion[Acompeticion.size()] );      
        return Vcompeticion;
	}

        

    public Map<Integer, Integer> getClasificacion(List<Partido> Lpartidos) {
        String consulta;
        Map<Integer, Integer> clasificacion = new HashMap<Integer, Integer>();
        for (int i =0; i<Lpartidos.size();i++){
            consulta = "SELECT * FROM Partido WHERE IdPartido= '"+ 
                    Lpartidos.get(i).getIdPartido() +"' ;";
             try {
                ConexionBD.getInstancia().conectar();
                ResultSet tabla = ConexionBD.getInstancia().consultar(consulta);

                while (tabla.next()) { // Si devuelve false es que la búsqueda es vacía
                    //devolver ganador del partido "Lpartidos.get(i)"
                    //System.out.println("idGanador: "+tabla.getInt("idGanador")+"\t"+"idPArtido: "+tabla.getInt(1));
                    if (tabla.getInt("idGanador") != -1){
                        if(!clasificacion.containsKey(tabla.getInt("idGanador"))){
                            clasificacion.put(tabla.getInt("idGanador"), 1);
                        }else{
                            clasificacion.put(tabla.getInt("idGanador"),clasificacion.get(tabla.getInt("idGanador"))+1);
                        }
                    }
                }
                          
                ConexionBD.getInstancia().desconectar();
            } catch (SQLException ex) {     
                System.out.println(ex);
            }
            
        }
        
        return clasificacion;
        
    }

}
